package master.project.web.global;

import master.common.data.TreeJSON;
import master.common.json.JSONResponseObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.CannotGetJdbcConnectionException;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.web.WebAttributes;
import org.springframework.security.web.authentication.session.SessionAuthenticationException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 */
@Controller
public class HomeController {
	
	private static Logger log = LoggerFactory.getLogger(HomeController.class);
	
//	IUserMgmtManager userMgmtManager;
//	
//	IOrgMgmtManager orgMgmtManager;
//	
//	@Autowired
//	public HomeController(IUserMgmtManager userMgmtManager, IOrgMgmtManager orgMgmtManager) {
//		this.userMgmtManager = userMgmtManager;
//		this.orgMgmtManager = orgMgmtManager;
//	}
	
	/**
	 * 
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/index.do")
	public String showHomePage(Model model) throws Exception {
		return "homepage";
	}	
	
	/**
	 * @param loginError
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/logon.do")
	public String showLogonPage(@RequestParam(value="login_error", required=false) String loginError, HttpServletRequest request, Model model) throws Exception {
		if (loginError!= null) {

            JSONResponseObject responseJSON = JSONResponseObject.newFailureJSONResponseObject();

			if(loginError.equals("2")) {
				//model.addAttribute("erorCause", "SYSTEM_EXPIRES");
			} else {
				Exception e = (Exception) request.getSession(true).getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
				if(e != null) {
					if(e instanceof CannotGetJdbcConnectionException) {
						responseJSON.setErrorMsg("系统无法连接数据库，请联系系统管理员。");
					} else if(e instanceof BadCredentialsException) {
						responseJSON.setErrorMsg("用户名和密码不匹配，请重新输入。");
					} else if(e instanceof SessionAuthenticationException) {
						responseJSON.setErrorMsg("您已经登录了系统，不能重复登录。");
					} else {
						responseJSON.setErrorMsg("登录失败，请刷新浏览器重新尝试，或联系管理员。");
						log.error("登录失败，错误原因：", e);
					}
				}
			}
			model.addAttribute("json", responseJSON.toJSONString());
		}
		return "logon";
	}
	
	/**
	 * 获取用户工作台配置
	 * @param model
	 * @return
	 * @throws Exception
	 */
//	@RequestMapping(value="/getWorkspace.do")
//	public String  getWorkspaceState(Model model) throws Exception {
//		try {
//			User user = (User)WebAppUtil.getSessionData("currentUser");
//			Organization org = (Organization)WebAppUtil.getSessionData("currentUserOrg");
//			UserProp userProp = userMgmtManager.getUserProp(user.getPk());
//			JSONStringer json = new JSONStringer();
//			json.object();
//			json.key("success").value(true);
//			if(userProp == null) {
//				userProp = new UserProp();
//				userProp.setPk(user.getPk());
//				userProp.setConfigType(1);
//				if(ObjectUtils.compare(user.getUsername(), "admin") == 0) {
//					userProp.setConfigType(1);
//				}else if(ObjectUtils.compare(org.getOrgLevel(), Constants.NATIONAL_LEVEL) == 0) {
//					userProp.setConfigType(1);
//				}else if(ObjectUtils.compare(org.getOrgLevel(), Constants.PROVINCIAL_LEVEL) == 0) {
//					userProp.setConfigType(2);
//				}
//			}
//			json.key("configType").value(userProp.getConfigType());
//			json.key("userConfig").value(userProp.getUserConfig());
//			json.endObject();
//			model.addAttribute("json", json);
//		} catch(Exception err) {
//			log.error("获取用户工作台配置错误。", err);
//			JSONStringer json = new JSONStringer();
//			json.object();
//			json.key("success").value(false);
//			json.key("error").value(err.getMessage());
//			json.endObject();
//			model.addAttribute("json", json);
//		}
//		return "json";
//	};
	
	/**
	 * 保存用户工作台配置
	 * @param config
	 * @param model
	 * @return
	 * @throws Exception
	 */
//	@RequestMapping(value="/saveWorkspace.do")
//	public String  saveWorkspaceState(@RequestParam(value="config",required=true)String config, Model model) throws Exception {
//		try {
//			User user = (User)WebAppUtil.getSessionData("currentUser");
//			Organization org = (Organization)WebAppUtil.getSessionData("currentUserOrg");
//			UserProp userProp = userMgmtManager.getUserProp(user.getPk());
//			if(userProp == null) {
//				userProp = new UserProp();
//				userProp.setPk(user.getPk());
//				userProp.setConfigType(1);
//				if(ObjectUtils.compare(user.getUsername(), "admin") == 0) {
//					userProp.setConfigType(1);
//				}else if(ObjectUtils.compare(org.getOrgLevel(), Constants.NATIONAL_LEVEL) == 0) {
//					userProp.setConfigType(1);
//				}else if(ObjectUtils.compare(org.getOrgLevel(), Constants.PROVINCIAL_LEVEL) == 0) {
//					userProp.setConfigType(2);
//				}
//			}			
//			userProp.setUserConfig(config);
//			userMgmtManager.saveUserProp(userProp);
//			JSONStringer json = new JSONStringer();
//			json.object();
//			json.key("success").value(true);
//			json.endObject();
//			model.addAttribute("json", json);
//		} catch(Exception err) {
//			log.error("保存用户工作台配置错误。", err);
//			JSONStringer json = new JSONStringer();
//			json.object();
//			json.key("success").value(false);
//			json.key("error").value(err.getMessage());
//			json.endObject();
//			model.addAttribute("json", json);
//		}
//		return "json";
//	};	
	
}
